#include"./wifi.h"
#include"./data.h"
#include"./control.h"
#include<Servo.h>
#include <freertos/FreeRTOS.h>
#include <freertos/semphr.h>

// 定义两个任务的句柄
TaskHandle_t Task1Handle;
TaskHandle_t Task2Handle;
String info;
network Network;
Ojson_data Receive;
Control Doaction;
analyse_data Nowmsg;
bool flag_start;
bool flag_mode2;
SemaphoreHandle_t xMutex;

// Task1 任务函数
void Task1(void *parameter) {
  while (true) {  
    info = Network.echoData();
    Serial.println(info);
    Receive.handledata(info);
    Nowmsg=Receive.getmsg();
    xSemaphoreTake(xMutex, portMAX_DELAY);
    Doaction.getserver(Network.Client);
    Doaction.getmsg(Receive.getmsg());
    flag_start=true;
    xSemaphoreGive(xMutex);
    info.clear();
    vTaskDelay(1000 / portTICK_PERIOD_MS); // 延迟 1000 毫秒    
  }
}
// Task2 任务函数
void Task2(void *parameter) {
  while (true) {
    while(flag_start)
    {
      Doaction.controlClaw();
      Doaction.controlClawFlag();
      flag_start = Doaction.flag_start;
    }
     
    vTaskDelay(2000 / portTICK_PERIOD_MS); // 延迟 2000 毫秒   
  }
}


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);  // 设置波特率
  while (!Serial) {
    ;  // 等待串口连接成功
  }
  Network.connectToWiFi();  
  xTaskCreate(
    Task1,             // 任务函数
    "Task 1",          // 任务名称
    5000,             // 任务栈大小（字节）
    NULL,              // 传递给任务的参数
    1,                 // 任务优先级
    &Task1Handle       // 任务句柄
  );

  // 创建 Task2，设置为较高优先级
  xTaskCreate(
    Task2,             // 任务函数
    "Task 2",          // 任务名称
    5000,             // 任务栈大小（字节）
    NULL,              // 传递给任务的参数
    2,                 // 任务优先级
    &Task2Handle       // 任务句柄
  );
  

  xMutex = xSemaphoreCreateMutex();
  if (xMutex == NULL) {
    Serial.println("Failed to create mutex");
    while (1);  // 无限循环，停止程序
  }                            
}

void loop() {
  // put your main code here, to run repeatedly:
}
